package com.fanqwz.kotlinmvvm.ui.activity.login

import android.databinding.DataBindingUtil
import android.view.LayoutInflater
import android.view.View
import com.fanqwz.kotlinmvvm.R
import com.fanqwz.kotlinmvvm.databinding.ActivityLoginBinding
import com.fanqwz.kotlinmvvm.presenter.viewmodel.IModel
import com.fanqwz.kotlinmvvm.presenter.viewmodel.IViewModel
import com.fanqwz.kotlinmvvm.ui.compositor.ViewCompositor
import com.fanqwz.kotlinmvvm.view.BaseView
import com.fanqwz.kotlinmvvm.view.IView
import javax.inject.Inject

/**
 * Created by fanqwz on 2018/3/6.
 */

// view接口向外发送发送用户事件以及提供UI操作接口
interface ILoginView : IView {
    fun onLoginEventCallBack(callback: (name: String, passwd: String)->Unit)
}

open class LoginView @Inject constructor() :
        BaseView<ActivityLoginBinding>(),
        ILoginView {

    override fun <T : IModel> onBind(viewmodel: IViewModel<T>) {
        binding.model = viewmodel.bind()
    }

    var callback: ((name: String, passwd: String)->Unit)? = null

    /** 这个函数看具体情况调用
     * 1、用户事件直接传递到activity（或fragment），这个函数不起作用，继续转发给viewmodel（如果要让view和viewmodel分离，需要这种方法做转发）
     * 2、用户事件直接传递到viewmodel，这个函数不起作用（！！！！！现在的方式！！！！！！！！）
     * 3、在activity中（通过ILoginView接口）调用本接口注册callback，在LoginView中注册onClickListener,然后通过callback将用户事件传递给activity，（标准做法，但是懒的话直接调mvvm的viewmodel就行了，都不用经过activity跳转）*/
    override fun onLoginEventCallBack(callback: (name: String, passwd: String) -> Unit) {
        this.callback = callback
    }

    override val viewCompositor: ViewCompositor
        get() = object : ViewCompositor() {
            override fun inflateView(layoutInflater: LayoutInflater): View? {
                binding = DataBindingUtil.inflate<ActivityLoginBinding>(
                        layoutInflater,
                        R.layout.activity_login,
                        null,
                        false,
                        databindingComponent)!!
                return binding.root
            }
        }
}